// npm install vuex@3

// 这里存放的是vuex相关的核心代码
import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
import setting from './modules/setting'

// 插件安装
Vue.use(Vuex)

// 创建安装并导出
export default new Vuex.Store({
  // 开启严格模式 -- 任何组件修改仓库的数据都会报错 -- 上线需要移除
  strict: true,
  // 通过state可以提供数据(所有组件共享的数据)
  state: {
    list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    title: '仓库大标题',
    count: 18
  },
  getters: {
    // 1.形参第一个参数就是state
    // 2.必须有返回值,返回值就是getters的值
    filterList (state) {
      return state.list.filter(item => item > 5)
    }
  },
  // 通过mutations可以提供修改数据的方法 -- 同步方法
  mutations: {
    // 所有mutations函数,第一个参数都是state
    addCount (state, n) {
      state.count += n
    },
    changeCount (state, newCount) {
      state.count = newCount
    }
  },
  // 处理异步操作,不能直接操作state,还是需要commit mutation
  actions: {
    // context 上下文
    // context.commit('mutation名字', 参数)
    changeCountAction (context, num) {
      setTimeout(() => {
        context.commit('changeCount', num)
      }, 1000)
    }
  },
  modules: {
    user,
    setting
  }
})
